/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import model.Cour;

/**
 *
 * @author Paul
 */
public class DAOCour extends DAO<Cour> {


    public void create(Cour obj) {
          String query = "insert into cour (nom) values (?)";//preparation de la requete
        /**initialisation des variables **/
        int nb = 0;
        int autoIncKeyFromApi = -1;
        PreparedStatement  ps=null;

       /**lancement de la connexion à la bd et de la requete **/
        try {
            Connection conn = DBConnection.getConnection();//Creation de la connexion
            ps= conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);//preparation de la requete
            
        /** remplacement des points d'interogation dans la query par les variables**/  
            ps.setString(1,obj.getNomCour());
            nb = ps.executeUpdate();//lancement de la requête
            ResultSet rs = ps.getGeneratedKeys();//recupération du résultat
            
            if(rs.next()){//récuperation de l'id 
                autoIncKeyFromApi = rs.getInt(1);
                System.out.println(autoIncKeyFromApi);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
        
    public void attributeEudiant(int id_Etudiant,int id_Cour) {
          String query = "insert into etu_cour_asso (id_eleve,id_cour) values (?,?)";//preparation de la requete
        /**initialisation des variables **/
        int nb = 0;
        int autoIncKeyFromApi = -1;
        PreparedStatement  ps=null;

       /**lancement de la connexion à la bd et de la requete **/
        try {
            Connection conn = DBConnection.getConnection();//Creation de la connexion
            ps= conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);//preparation de la requete
            
        /** remplacement des points d'interogation dans la query par les variables**/  
            ps.setInt(1,id_Etudiant);
            ps.setInt(2,id_Cour);
            nb = ps.executeUpdate();//lancement de la requête
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }    

        public void attributeProfesseur(int id_prof,int id_Cour) {
          String query = "insert into enseign_cour_asso (id_enseignant,id_cour) values (?,?)";//preparation de la requete
        /**initialisation des variables **/
        int nb = 0;
        int autoIncKeyFromApi = -1;
        PreparedStatement  ps=null;

       /**lancement de la connexion à la bd et de la requete **/
        try {
            Connection conn = DBConnection.getConnection();//Creation de la connexion
            ps= conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);//preparation de la requete
            
        /** remplacement des points d'interogation dans la query par les variables**/  
            ps.setInt(1,id_prof);
            ps.setInt(2,id_Cour);
            nb = ps.executeUpdate();//lancement de la requête
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
        
            public ArrayList<Cour> findCours(int id_etudiant){
        String query="SELECT c.id_cour, c.nom FROM cour c, etu_cour_asso e WHERE e.id_cour = c.id_cour AND e.id_eleve ="+id_etudiant+";";
        ArrayList<Cour> cours = new ArrayList<Cour>();
        Cour cour = null;
        Statement  ps=null;
        try {
            Connection conn = DBConnection.getConnection();
            ps= conn.createStatement();
            ResultSet res = ps.executeQuery(query);
            while (res.next()) {
            int id = res.getInt("id_cour");
            String nom = res.getString("nom");
                cour = new Cour(id,nom);
                cours.add(cour);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return cours;
    }
    
    public void update(Cour obj) {
        String query = "";
        changeGeneral(query);
    }

    public void delete(Cour obj) {
        String query = "";
        changeGeneral(query);
    }

    public ArrayList<Cour> getAll() {
        String query = "";
        return findGeneral(query);
    }

    public Cour find(int id) {
        String query = "select * from cour where id_cour="+ id +";";
        Cour cour = null;
        if(findGeneral(query).size()!=0){
            cour = findGeneral(query).get(0);
        }
        return cour;
    }

//---------------------------------------------------------private method--------------------------------------------------------------------//
    private int changeGeneral(String query) {
        Statement st = null;
        int nb = 0;
        try {
            Connection conn = DBConnection.getConnection();
            st = conn.createStatement();
            nb = st.executeUpdate(query);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return nb;
    }

    private ArrayList<Cour> findGeneral(String requete) {
        ArrayList<Cour> cours = new ArrayList<Cour>();
        Statement st = null;
        Cour cour = null;
        try {
            Connection conn = DBConnection.getConnection();
            st = conn.createStatement();
            ResultSet res = st.executeQuery(requete);
            while (res.next()) {
                cour = createObject(res);
                cours.add(cour);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return cours;
    }

    private Cour createObject(ResultSet res) {
        Cour cour = null;
        try {
            int id = res.getInt("id_cour");
            String nom = res.getString("nom");
            cour = new Cour(id, nom);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return cour;
    }
}
